package com.masnegocio.sellodigital.ws;

import javax.jws.WebService;

import org.apache.log4j.Logger;

import com.masnegocio.sellodigital.SelladoDigitalRequest;
import com.masnegocio.sellodigital.SelladoDigitalResponse;
import com.masnegocio.sellodigital.SelloDigital;
import com.masnegocio.sellodigital.comun.CodigoMensajeUtil;
import com.masnegocio.sellodigital.comun.SelloDigitalConstantes;
import com.masnegocio.sellodigital.comun.SelloDigitalException;
import com.masnegocio.sellodigital.dto.SelloDigitalDto;
import com.masnegocio.sellodigital.servicio.SelloDigitalServicio;
import com.masnegocio.sellodigital.servicio.impl.SelloDigitalServicioImpl;

@WebService(
		endpointInterface = "com.masnegocio.sellodigital.SelloDigital",
		name="SelloDigital",
		portName="SelloDigital",
		serviceName="SelloDigital",
		targetNamespace="http://www.masnegocio.com/SelloDigital/",
		wsdlLocation="WEB-INF/wsdl/SelloDigital.wsdl")
public class SelloDigitalImpl implements SelloDigital{
	private static final Logger logger = Logger.getLogger(SelloDigitalImpl.class);
	private SelloDigitalServicio selloDigitalServicioImpl;
	@Override
	public SelladoDigitalResponse selloDigitalValidation(SelladoDigitalRequest selladoDigitalRequest) {
		if(logger.isInfoEnabled()){
			logger.info("INICIO DEL PROCESO DE SELLADO PARA EL RFC "+ selladoDigitalRequest.getRfc() +" Y SU CADENA ORIGINAL "+selladoDigitalRequest.getCadenaOriginal());
		}
		SelloDigitalDto selloDigitalDto = new SelloDigitalDto();
		selloDigitalDto.setCadenaOriginal(selladoDigitalRequest.getCadenaOriginal());
		selloDigitalDto.setRfc(selladoDigitalRequest.getRfc());
		selloDigitalServicioImpl = new SelloDigitalServicioImpl();//Quitar cuando se agregue Spring
		SelladoDigitalResponse selladoDigitalResponse = new SelladoDigitalResponse();
		try {
			selladoDigitalResponse.setSello(selloDigitalServicioImpl.aplicarSelloDigital(selloDigitalDto));
			selladoDigitalResponse.setCodigo(SelloDigitalConstantes.CODIGO_EXITO_OPERACION);
			selladoDigitalResponse.setDescripcion(CodigoMensajeUtil.obtenerCodigo(SelloDigitalConstantes.CODIGO_EXITO_OPERACION));
			selladoDigitalResponse.setEstatus(SelloDigitalConstantes.CODIGO_ESTATUS_EXITO);
			return selladoDigitalResponse;
		} catch (SelloDigitalException e) {
			selladoDigitalResponse.setCodigo(e.getCodigoError());
			selladoDigitalResponse.setDescripcion(e.getDescripcionError());
			selladoDigitalResponse.setEstatus(e.getCodigoEstatus());
			return selladoDigitalResponse;
		}finally{
			if(logger.isInfoEnabled()){
				logger.info("TERMINO DEL PROCESO DE SELLADO PARA EL RFC "+ selladoDigitalRequest.getRfc() +" Y SU CADENA ORIGINAL "+selladoDigitalRequest.getCadenaOriginal()+" EL PROCESO TIENE ESTADO: "+selladoDigitalResponse.getEstatus()+" UN CODIGO: "+selladoDigitalResponse.getCodigo() + "Y DESCRIPCION: "+selladoDigitalResponse.getDescripcion());
			}
		}
	}
}
